const modal = require('./modal')
const util = require('./util')
const schema = modal.schema

/**
 * 保存淘宝账号
 */
Parse.Cloud.define('saveTbk', async (request, response) => {
  const { id, username, password, administrator } = request.params
  const tbk = schema.tbk()
  const query = tbk.query()
  const user = modal.user()
  user.id = administrator // 管理负责人
  if (!username) {
    return response.error('请填写账号')
  }
  if (!password) {
    return response.error('请填写密码')
  }
  if (!administrator) {
    return response.error('请指定管理负责人')
  }
  query.equalTo('username', username)
  query.notEqualTo('deleted', 1) // 不查已经删除的账号
  // 如果存在ID，表示为修改，检测账号重名时，需要将自身排除
  if (id) {
    query.notEqualTo('objectId', id)
  }
  if (await query.first()) {
    return response.error('该账号已经存在，请重新创建')
  }
  try {
    await tbk.save({
      id,
      username,
      password,
      administrator: user,
      deleted: 0
    })
    response.success({
      code: 1
    })
  } catch (err) {
    response.error(err.message)
  }
})
/**
 * 获取淘宝账号列表
 */
Parse.Cloud.define('getTbks', async (request, response) => {
  const { currentPage, pageSize } = request.params
  const tbkSchema = schema.tbk()
  const query = tbkSchema.query()
  let tbkList = []  // 账号列表

  query.equalTo('deleted', 0)
  query.limit(pageSize)
  query.skip((currentPage - 1) * pageSize)
  query.include('administrator')
  query.descending('updatedAt')  // 以更新时间排序
  try {
    const result = await query.find()  // 查找出来的tbk原始数据
    tbkList = result.map((item) => {
      const temp = util.mapAttributes(item, ['username', 'password', 'deleted'])
      // 获取管理员的数据
      const administrator = item.get('administrator')
      temp.id = item.id
      temp.administratorId = administrator.id // 管理员ID
      temp.administratorName = administrator.get('username') // 管理员名称
      return temp
    })
    const count = await query.count()
    response.success({
      data: tbkList,
      total: count,   // 总数量
      totalPage: Math.ceil(count / pageSize),  // 总页数
      currentPage,   // 当前页
      pageSize   // 每页数量
    })
  } catch (err) {
    response.error(err.message)
  }
})
/**
 * 获取所有淘宝客列表
 */
Parse.Cloud.define('getTbkList', async (request, response) => {
  const tbkSchema = schema.tbk()
  const query = tbkSchema.query()
  let tbkList = []
  query.equalTo('deleted', 0)
  query.descending('updatedAt')  // 以更新时间排序

  try {
    const result = await query.find()
    tbkList = result.map((item) => {
      const temp = util.mapAttributes(item, ['username', 'password', 'deleted'])
      temp.id = item.id
      return temp
    })
    response.success(tbkList)
  } catch (err) {
    response.error(err.message)
  }
})
/**
 * 删除淘宝客账号
 */
Parse.Cloud.define('deleteTbk', async (request, response) => {
  const id = request.params.id
  const tbkSchema = schema.tbk()
  const query = tbkSchema.query()
  // 如果ID没有传递，返回错误信息
  if (!id) {
    return response.error('请提供需要删除的淘宝客账号ID')
  }
  // 如果根据ID能查出对应的淘宝客账号，则将删除状态置为'删除'，如果不能查到，返回错误信息
  const currentTbk = await query.get(id)
  if (currentTbk) {
    currentTbk.set('deleted', 1)
    await currentTbk.save()
    response.success({
      code: 1
    })
  } else {
    response.error('找不到该淘宝客账号')
  }
})
